-
-
WebServer instead of a DedicatedServer, for simple things.
-
Example: pinball game with scoreboard.
-
-
Ghost Data instead of Concurrent Multiplayer.
-
Ghost Data refers to just a REPLAY of a different player, requiring only 1 network transfer at the start of the level, instead of being real-time.
-
Supposedly widely used in racing games and mobile games.
-
Example: penguin game.
-
-
Tips to make lag less frustrating:
-
Players can walk through other players.
-
In case of lag, there will be no collision problems.
-
-
It doesnβt matter who kills the enemy, everyone gets credit, no need to fight over loot.
-
"Basically single-player++".
-
-
-
-
Very good video.
-
Talks about random network things, with little focus on Netcode.
-
Overall, it's basically an interview with someone who works on networking and the challenges in each game.
-
Worth watching from start to finish.
-
Warcraft (1994):
-
Uses Lockstep, since the game is an RTS.
-
It's said that the code was not clean; itβs a mess.
-
-
Diablo (1997):
-
The game was made with a different network architecture in mind, so it was messy initially.
-
Determinism is required for lockstep.
-
The game was written in Haste.
-
P2P Lockstep, Client Authority was implemented.
-
{16:25}
-
"Does the client immediately see something happening, or wait for server confirmation?"
-
Answer: "You kill on your screen and inform the Level Master that the creature died, very loose. Easy to cheat."
-
Very insecure. Client-authority.
-
-
-
"Don't do a game like this. People will cheat".
-
-
Starcraft (1998):
-
Same as previous games.
-
-
Guild Wars (2005):
-
{19:42} File serving:
-
"Downloads the game while playing."
-
Everything is cached on the drive.
-
Each file has an ID and version.
-
"delta compress the difference between the file a person has and a file a person should have".
-
TCP.
-
-
{36:00}
-
Everything uses TCP throughout the game.
-
The host for the game is chosen.
-
Server separation:
-
"Component isolation split it into several servers."
-
"Even if the servers run on the same machine, it's better to have separate servers for organization and crash understanding."
-
Bottlenecks are discussed, so splitting into smaller servers allows horizontal scaling by adding more machines instead of upgrading the same one.
-
Also provides uptime protection: if one machine fails, others keep the connection active.
-
-
Protobuf is praised.
-
The game rarely needed downtime for updates.
-
Discusses TCP vs UDP extensively.
-
UDP is good for FirstPersonShooters.
-
TCP can be problematic with errors, mobile connections, etc.
-
-
"The server is authoritative for important things like position and which items players have, but clients..."
-
Tips:
-
"Always code assuming 1-minute RTT (ping) to consider failure cases."
-
-
-
-
-
.
-
.
Sources, Talks